// https://leetcode.cn/problems/min-stack/
// Created by ade on 2022/8/23.
// MinStack() 初始化堆栈对象。
// void push(int val) 将元素val推入堆栈。
// void pop() 删除堆栈顶部的元素。
// int top() 获取堆栈顶部的元素。
// int getMin() 获取堆栈中的最小元素。

class MinStack {
public:
    stack<int> st;
    stack<int> min_st;

//    multiset<int> s;//最笨的方法

    MinStack() {
        min_st.push(INT_MAX);
    }

    void push(int val) {
        st.push(val);
//        s.insert(val);
        if (val < min_st.top()) {
            min_st.push(val);
        } else {
            min_st.push(min_st.top());
        }
    }

    void pop() {
        int back = st.top();
        st.pop();
        min_st.pop();
//        s.erase(s.find(back));
    }

    int top() {
        return st.top();
    }

    int getMin() {
        return min_st.top();
    }
};